#!/bin/bash

# 检查端口是否被占用的函数
is_port_occupied() {
    local port=$1
    if netstat -tuln | grep -q ":$port "; then
        return 0  # 端口被占用
    else
        return 1  # 端口未被占用
    fi
}

# 递归检测并返回第一个未被占用的端口
find_free_port() {
    local start_port=$1
    local current_port=$start_port

    while true; do
        if is_port_occupied $current_port; then
            # 端口被占用，递增端口号继续检测
            current_port=$((current_port + 1))
        else
            # 找到未被占用的端口，返回端口号
            echo $current_port
            return 0
        fi
    done
}

# 主程序
main() {
    local start_port=8800  # 起始端口号，可以根据需要修改
    local free_port

    # 调用递归函数并获取返回的端口号
    free_port=$(find_free_port $start_port)

    # 打印找到的未被占用的端口号
    echo $free_port

    # 返回找到的端口号（注意：这里返回的是脚本执行状态，而不是端口号。
    # 如果你需要在其他脚本中捕获这个端口号，应该通过echo或其他方式传递。）
    # 一般情况下，0表示成功，其他数字表示失败。这里我们假设成功找到端口后返回0，
    # 但如果需要返回端口号作为执行状态码，由于状态码只能是0-255之间的数字，
    # 这在端口号范围较大时可能不适用。因此，更合理的做法是通过echo输出端口号。
    return 0
}

# 执行主程序
main
